//
//  ZAQStatusListViewModel.swift
//  ZAQWBDZT
//
//  Created by 赵安庆 on 16/9/24.
//  Copyright © 2016年 zaq. All rights reserved.
//

import UIKit
import SDWebImage
class ZAQStatusListViewModel: NSObject {
    lazy var statusList: [ZAQstatusViewModel] = [ZAQstatusViewModel]()

    //  加载首页微博数据
    //  isPullup 是否上拉加载
//    func loadData(isPullup: Bool, callBack: @escaping (Bool)->()) {
    func loadData(isPullup: Bool, callBack: @escaping (Bool, String)->()) {


        let accessToken = ZAQUserAccountViewModel.sharedUserAccountViewModel.accessToken!

        var maxId: Int64 = 0
        var sinceId: Int64 = 0
        if isPullup {
            //  上拉加载
            maxId = statusList.last?.status?.id ?? 0
            //  解决数据重复问题, 需要让其微博id减去1
            if maxId > 0 {
                maxId -= 1
            }

        } else {
            //  下拉刷新
          sinceId = statusList.first?.status?.id ?? 0
        }
//        //  检测本地是否有缓存数据
//        let localArray = ZAQStatusDAL.checkCacheData(maxId: maxId, sinceId: sinceId)
//        print(localArray)

        var message: String = "没有加载到最新微博数据"

        ZAQStatusDAL.loadData(accessToken: accessToken, maxId: maxId, sinceId: sinceId) { (statusArray) in

//            if error != nil{
//                print("网络请求\(error)")
//                callBack(false,message)
//
//                return
//            }
//            //代码执行到这，表示网络请求成功了
//            guard let dic = response as? [String: Any] else {
//                print("你不是一个正确的字典格式")
//                callBack(false,message)
//                return
//            }
//            guard let statusArray = dic["statuses"] as? [[String: Any]] else {
//                print("你不是一个正确的字典格式")
//                callBack(false,message)
//                return
//            }
            // 缓存新浪微博数据

//            ZAQStatusDAL.cacheData(statusDicArray: statusArray)


            //  使用yymodel进行数组字典转成数组模型
            let statusArr = NSArray.yy_modelArray(with: ZAQStatus.self, json: statusArray) as! [ZAQStatus]

            var tempArray = [ZAQstatusViewModel]()
//MARK:创建调度组
            let group = DispatchGroup()

            //  遍历模型数组
            for status in statusArr {
                //  把模型转成viewModel让cell使用
                let viewModel = ZAQstatusViewModel(status: status)
                //viewModel.status = status
                tempArray.append(viewModel)
                //  判断是否有单张图片
                if status.pic_urls?.count == 1 {
                    //  原创微博配图等于1张,需要下载

                    if let url = status.pic_urls?.first?.thumbnail_pic {
                        //  在调度组中执行任务
                        DispatchQueue.global().async(group: group, qos: DispatchQoS.default, flags: [], execute: {
                            group.enter()
                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                                print("下载完成: \(url)")
                                group.leave()
                            })
                            print("哈哈")

                        })
                    }
                }
                if status.retweeted_status?.pic_urls?.count == 1 {
                    //  转发微博图片等于1张,需要下载

                    if let url = status.retweeted_status?.pic_urls?.first?.thumbnail_pic {
                        //  在调度组中执行任务
                        DispatchQueue.global().async(group: group, qos: DispatchQoS.default, flags: [], execute: {
                            group.enter()
                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                                print("下载完成: \(url)")
                                 group.leave()
                            })

                            print("嘿嘿")

                        })

                    }

                }

            }

            //  给数据源赋值
            if isPullup {
                //  如果上拉加载需要把数据追加到原始数组后面
                self.statusList.append(contentsOf: tempArray)

            } else {
                //  下拉刷新
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
            //  判断服务器返回的数据个数是否大于0
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }


            //self.tableView.reloadData()
            //  数据加载完成进行数据回调
            group.notify(queue: DispatchQueue.main, execute: {
                //  等待单张图片全部执行完成后,回调数据
                print("单张图片全部下载完成")
                
                callBack(true,message)
            })

        }
    }

}
